package com.cy.pj.notice.dao;


import com.cy.pj.sys.pojo.SysNotice;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * 创建公獒磨矿数据持久层对象,借助测类型的对象基于Mybatis技术实现与数据库的交互
 * 通过这些交互来访问或操作公告模块的数据
 * 建议：在springboot工程中基于mybatis实现与数据库交互式，一般首先要定一个数据层接口
 * 并通过@Mapper注解对接口进行描述，系统启动时，会对启动类所在包以及子包中的类进行扫描
 * 假如发现接口上又@Mapper注解（mybatis提供），系统底层会基于接口创建其实现类(借助反射包中proxy类进行创建)，
 * 在实现类的内部，底层会基于Sqlsession对象实现数据访问和操作
 * */

@Mapper
public interface SysNoticeDao {
  /**  基于条件查询公告信息
    @Param notice 用于封装查询参数
    @return  基于查询条件查询到结果
   */
    List<SysNotice> selectNotices(SysNotice sysNotice);


    /**
     * 基于id删除公告信息
     * @param id
     * @return 删除了几行
     * 说明：在jdk8之前，对于接口方法，加入参数有多个或者参数是数组，
     * 是不可以直接在sql映射文件中使用参数名的，需要通过@Param这个注解定义
     * 然后在sql映射语句使用@param注解中的名字获取参数数据。
     * 对于数组而言在sql映射中可以直接使用array进行接受也可以
     */
    int deleteById(Long... id);


    /**
     * 持久化notice对象数据
     * @param notice(封装叻要写入的对象)
     * @return 返回写入的行数
     */
    int insertNotice(SysNotice notice);


    /**
     * 基于id查询notice对象
     * @param id 公告唯一标识id
     * @return 基于id拆卸难道的结果
     * 建议：简单sql映射语句可以直接写到接口方法上，复杂sql还是推荐写到xml映射文件中
     */
    @Select("select * from sys_notices where id=#{id}")
    SysNotice findById(Long id);


    /**
     * 持久化notice对象
     * @param notice (封装了要更新的注释)
     * @return 返回更新的行数
     */
    int updateNotice(SysNotice notice);

}
